﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AGPR.Locadora.Data;

namespace AGPR.Locadora.Model
{
    public class StatusLocacao
    {
        private static ActiveRecord db = ActiveRecord.Instancia;

        #region Atributos

        /// <summary>
        /// Tabela de Status no Banco de Dados
        /// </summary>
        private const string TABELA = "status_locacao";

        /// <summary>
        /// Código do Status
        /// </summary>
        public int id;

        /// <summary>
        /// Nome do Status
        /// </summary>
        public string nome;

        #endregion

        #region Create

        /// <summary>
        /// Retorna uma Instância de StatusLocacao
        /// </summary>
        /// <param name="dados">Dados a serem populados</param>
        /// <returns>StatusLocacao</returns>
        public static StatusLocacao Create(dynamic dados = null)
        {
            StatusLocacao status = new StatusLocacao();

            if (dados != null)
            {
                status.id = Convert.ToInt32(dados["id_status"]);
                status.nome = dados["nome_status"];
            }

            return status;
        }


        #endregion

        #region Get

        /// <summary>
        /// Retorna um Status
        /// </summary>
        /// <param name="id">Código do Status</param>
        /// <returns>Status</returns>
        public static StatusLocacao Get(dynamic id)
        {
            var item = db.where("id_status", id).selectOne(TABELA);

            return item != null ? StatusLocacao.Create(item) : null;
        }

        #endregion

        #region GetAll

        /// <summary>
        /// Retorna todos os Status em forma de lista
        /// </summary>
        /// <returns>Status</returns>
        public static List<StatusLocacao> GetAll()
        {
            List<StatusLocacao> statuses = new List<StatusLocacao>();

            foreach (var status in db.order_by("nome_status").select(TABELA))
            {
                statuses.Add(StatusLocacao.Create(status));
            }

            return statuses;
        }

        #endregion

        #region Html

        /// <summary>
        /// Retorna lista de Status em html
        /// </summary>
        /// <param name="atual">Status padrão</param>
        /// <returns>Html</returns>
        public static string Html(int atual = 0)
        {
            string html = "", selected;

            foreach (StatusLocacao i in GetAll())
            {
                selected = i.id == atual ? " selected=\"selected\"" : "";
                html += "<option value=\"" + i.id + "\" " + selected + ">" + i.nome + "</option> \n";
            }

            return html;
        }

        #endregion
    }
}
